package com.atguigu.spzx.manager.utils;

import com.atguigu.spzx.model.entity.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * ClassName: MenuHelper
 * Package:
 * Description:
 *
 * @Author:xiaohei
 * @Create 2024/5/19 14:42
 * Version 1.0
 */

//封装树形菜单的工具类
public class MenuHelper {

    //递归实现
    public static List<SysMenu> buildTree(List<SysMenu> sysMenuList){
        //sysMenuList所有菜单集合
        //创建list集合，用于封装最终的数据
        List<SysMenu> trees = new ArrayList<>();
        //遍历所有菜单集合
        for(SysMenu sysMenu : sysMenuList){
            //找到递归的入口
            //条件：parent_id = 0
            if(sysMenu.getParentId().longValue() == 0){
                //根据第一层找下一层数据  第一个参数：当前菜单所在层  第二个参数：所有菜单集合
                trees.add(findChildren(sysMenu,sysMenuList));
            }
        }

        return trees;
    }

    //递归查找下层菜单
    private static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {
        //sysMenu里有listchildren封装下一层数据
        sysMenu.setChildren(new ArrayList<>());

        //递归查询
        //sysMenu的id值和sysMenuList中的parentId值相同就是下层菜单
        for (SysMenu menu : sysMenuList){
            if(menu.getParentId().longValue() == sysMenu.getId().longValue()){
                //menu就是下层数据 进行封装
                sysMenu.getChildren().add(findChildren(menu, sysMenuList));
            }
        }
        return sysMenu;
    }
}
